﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Presenter;
using Sinacor.UI.Bovespa.Ordens.View.SmartClient;
using Sinacor.UI.Bovespa.Clientes.View.SmartClient;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.View.SmartClient
{
    /// <summary>
    /// Interaction logic for CadastroBloqueio.xaml
    /// </summary>
    public partial class CadastroBloqueio : SinacorWindow, ICadastroBloqueio
    {                
        #region Campos

        #endregion

        #region Propriedades

        public Presenter.CadastroBloqueio PresenterCadastroBloqueio { get; set; }

        public Model.Bloqueio CurrentModel
        {
            get
            {
                if (this.DtgBloqueio.EditItem != null)
                    return this.DtgBloqueio.EditItem as Model.Bloqueio;
                else if (this.DtgBloqueio.Items.CurrentItem != null)
                    return this.DtgBloqueio.Items.CurrentItem as Model.Bloqueio;
                else if (this.DtgBloqueio.SelectedItem != null)
                    return this.DtgBloqueio.SelectedItem as Model.Bloqueio;
                else if (this.DtgBloqueio.SelectedIndex >= 0)
                    return this.DtgBloqueio.Items[this.DtgBloqueio.SelectedIndex] as Model.Bloqueio;
                else
                    return null;
            }
        }

        #endregion

        #region Enum

        enum Origem
        {
            Pesquisa,
            Grid
        }

        #endregion

        #region Construtor

        public CadastroBloqueio()
        {
            InitializeComponent();

            this.IniciarObjetos();
        }

        #endregion

        #region Metodos

        private void IniciarObjetos()
        {
            this.PresenterCadastroBloqueio = new Presenter.CadastroBloqueio(this);
            this.DataContext = this.PresenterCadastroBloqueio;

            DtgBloqueio.NewItemType = typeof(Model.Bloqueio);

            this.AfterInitialize += new RoutedEventHandler(CadastroBloqueio_AfterInitialize);

            BtnPesquisar.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnPesquisar_OnBufferedClick);
            BtnNovaPesquisa.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnNovaPesquisa_OnBufferedClick);
            BtnPesquisarAtivo.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnPesquisarAtivo_OnBufferedClick);
            BtnPesquisarCliente.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnPesquisarCliente_OnBufferedClick);

            DtgBloqueio.Deleting += new CancelItemsEventHandler(DtgBloqueio_Deleting);
            DtgBloqueio.EndingInsert += new CancelItemEventHandler(DtgBloqueio_EndingInsert);
            DtgBloqueio.EndingUpdate += new CancelItemEventHandler(DtgBloqueio_EndingUpdate);
            DtgBloqueio.UpdateBegun += new ItemEventHandler(DtgBloqueio_UpdateBegun);
            DtgBloqueio.InsertBegun += new ItemEventHandler(DtgBloqueio_InsertBegun);
            DtgBloqueio.UpdateEnded += new ItemEventHandler(DtgBloqueio_UpdateEnded);
            DtgBloqueio.InsertEnded += new ItemEventHandler(DtgBloqueio_InsertEnded);
            DtgBloqueio.Deleted += new ItemsEventHandler(DtgBloqueio_Deleted);
            DtgBloqueio.InsertCanceled += new ItemEventHandler(DtgBloqueio_InsertCanceled);
            DtgBloqueio.UpdateCanceled += new ItemEventHandler(DtgBloqueio_UpdateCanceled);
        }

        private void ConsultarBloqueios()
        {
            //Tipo bloqueio
            if (RdbAssessor.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.Assessor;
            else if (RdbAtivo.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.Papel;
            else if (RdbCliente.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.Cliente;
            else if (RdbGrupoAfinidade.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.GrupoAfinidade;
            else if (RdbMercado.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.Mercado;
            else if (RdbTipoCliente.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = Model.Enum.TipoBloqueio.TipoCliente;
            else
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = null;

            //Natureza operacao
            if (ChkCompra.IsChecked.Value && ChkVenda.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.NaturezaOperacao = Model.Enum.NaturezaOperacao.CompraVenda;
            else if (ChkCompra.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.NaturezaOperacao = Model.Enum.NaturezaOperacao.Compra;
            else if (ChkVenda.IsChecked.Value)
                this.PresenterCadastroBloqueio.FiltroBloqueio.NaturezaOperacao = Model.Enum.NaturezaOperacao.Venda;
            else
                this.PresenterCadastroBloqueio.FiltroBloqueio.NaturezaOperacao = null;

            //Força o binding
            this.MoveFocus(new System.Windows.Input.TraversalRequest(FocusNavigationDirection.Next));
            this.MoveFocus(new System.Windows.Input.TraversalRequest(FocusNavigationDirection.Previous));

            //Consultar Bloqueios            
            this.PresenterCadastroBloqueio.ConsultarBloqueios();
        }

        private void LimparCampos()
        {
            if (this.PresenterCadastroBloqueio.FiltroBloqueio != null)
            {
                this.PresenterCadastroBloqueio.FiltroBloqueio.Tipo = null;
                this.PresenterCadastroBloqueio.FiltroBloqueio.NaturezaOperacao = null;
            }

            if (this.PresenterCadastroBloqueio.ListaBloqueios != null &&
                this.PresenterCadastroBloqueio.ListaBloqueios.Count > 0)
            {
                this.PresenterCadastroBloqueio.ListaBloqueios.Clear();
                this.AtualizarListaBloqueios();
            }

            this.LimparCampos(GrdPesquisa);
        }

        private void PesquisarAtivo(Origem origem)
        {
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo();

            if (origem == Origem.Grid && this.CurrentModel != null)
                modelTitulo.Codigo = this.CurrentModel.Ativo;
            else if (origem == Origem.Pesquisa && this.PresenterCadastroBloqueio.FiltroBloqueio != null)
                modelTitulo.Codigo = this.PresenterCadastroBloqueio.FiltroBloqueio.Ativo;

            modelTitulo.Mercado = null;
            modelTitulo.DataPregao = this.PresenterCadastroBloqueio.InformacoesMovimento.DataMovimento;

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Ordens.Label.ManutencaoOrdens");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                if (origem == Origem.Grid && this.CurrentModel != null)
                    this.CurrentModel.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
                else if (origem == Origem.Pesquisa && this.PresenterCadastroBloqueio.FiltroBloqueio != null)
                    this.PresenterCadastroBloqueio.FiltroBloqueio.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;

                TxtAtivo.UpdateTarget(SinacorTextBox.TextProperty);
            }

            pesquisaTitulo = null;
        }

        private void PesquisarCliente(Origem origem)
        {
            PesquisaClientes pesquisaClientes = new PesquisaClientes();

            Clientes.Model.PesquisaCliente filtroPesq = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente();

            if (origem == Origem.Grid && this.CurrentModel != null)
            {
                if (this.CurrentModel.Cliente != null)
                    filtroPesq.Apelido = this.CurrentModel.Cliente.Apelido;
                else
                    filtroPesq.Apelido = null;
            }
            else if (origem == Origem.Pesquisa && this.PresenterCadastroBloqueio.FiltroBloqueio != null)
            {
                if (this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente != null)
                    filtroPesq.Apelido = this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente.Apelido;
                else
                    filtroPesq.Apelido = null;
            }

            pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.ManutencaoOrdens, filtroPesq);

            pesquisaClientes.Owner = this;
            pesquisaClientes.SetMenuHeader("Bovespa.Ordens.Label.ManutencaoOrdens");
            pesquisaClientes.ShowDialog();

            if (pesquisaClientes.PesquisaClienteModel.Codigo.HasValue && pesquisaClientes.PesquisaClienteModel.Codigo > 0)
            {
                if (origem == Origem.Grid && this.CurrentModel != null)
                {
                    this.CurrentModel.Cliente = new Model.Cliente
                    { 
                        Codigo = pesquisaClientes.PesquisaClienteModel.Codigo,
                        Apelido = pesquisaClientes.PesquisaClienteModel.Apelido
                    };
                }
                else if (origem == Origem.Pesquisa && this.PresenterCadastroBloqueio.FiltroBloqueio != null)
                {
                    this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente = new Model.Cliente
                    {
                        Codigo = pesquisaClientes.PesquisaClienteModel.Codigo,
                        Apelido = pesquisaClientes.PesquisaClienteModel.Apelido
                    };
                }

                TxtCliente.UpdateTarget(SinacorTextBox.TextProperty);
            }

            pesquisaClientes = null;
        }

        private void AtualizaCamposCurrentModel()
        {
            SinacorRadioButton rdbAssessor = null;
            SinacorRadioButton rdbAtivo = null;
            SinacorRadioButton rdbCliente = null;
            SinacorRadioButton rdbGrupoAfinidade = null;
            SinacorRadioButton rdbMercado = null;
            SinacorRadioButton rdbTipoCliente = null;

            SinacorCheckBox chkCompra = null;
            SinacorCheckBox chkVenda = null;

            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                rdbAssessor = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridAssessor");
                rdbAtivo = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridAtivo");
                rdbCliente = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridCliente");
                rdbGrupoAfinidade = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridGrupoAfinidade");
                rdbMercado = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridMercado");
                rdbTipoCliente = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridTipoCliente");

                chkCompra = (SinacorCheckBox)ControlHelper.FindChild(row, "ChkGridCompra");
                chkVenda = (SinacorCheckBox)ControlHelper.FindChild(row, "ChkGridVenda");

                //Tipo bloqueio
                if (rdbAssessor.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.Assessor;
                else if (rdbAtivo.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.Papel;
                else if (rdbCliente.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.Cliente;
                else if (rdbGrupoAfinidade.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.GrupoAfinidade;
                else if (rdbMercado.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.Mercado;
                else if (rdbTipoCliente.IsChecked.Value)
                    this.CurrentModel.Tipo = Model.Enum.TipoBloqueio.TipoCliente;

                //Natureza operacao
                if (chkCompra.IsChecked.Value && chkVenda.IsChecked.Value)
                    this.CurrentModel.NaturezaOperacao = Model.Enum.NaturezaOperacao.CompraVenda;
                else if (chkCompra.IsChecked.Value)
                    this.CurrentModel.NaturezaOperacao = Model.Enum.NaturezaOperacao.Compra;
                else if (chkVenda.IsChecked.Value)
                    this.CurrentModel.NaturezaOperacao = Model.Enum.NaturezaOperacao.Venda;
                else
                    this.CurrentModel.NaturezaOperacao = null;
            }
        }

        private void AtualizaControlesCurrentModel()
        {
            SinacorComboBox cmbAssessor = null;
            SinacorComboBox cmbGrupoAfinidade = null;
            SinacorComboBox cmbMercado = null;
            SinacorComboBox cmbTipoCliente = null;

            SinacorRadioButton rdbAssessor = null;
            SinacorRadioButton rdbAtivo = null;
            SinacorRadioButton rdbCliente = null;
            SinacorRadioButton rdbGrupoAfinidade = null;
            SinacorRadioButton rdbMercado = null;
            SinacorRadioButton rdbTipoCliente = null;

            SinacorCheckBox chkCompra = null;
            SinacorCheckBox chkVenda = null;

            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                cmbAssessor = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridAssessor");
                cmbGrupoAfinidade = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridGrupoAfinidade");
                cmbMercado = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridMercado");
                cmbTipoCliente = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridTipoCliente");

                rdbAssessor = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridAssessor");
                rdbAtivo = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridAtivo");
                rdbCliente = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridCliente");
                rdbGrupoAfinidade = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridGrupoAfinidade");
                rdbMercado = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridMercado");
                rdbTipoCliente = (SinacorRadioButton)ControlHelper.FindChild(row, "RdbGridTipoCliente");

                chkCompra = (SinacorCheckBox)ControlHelper.FindChild(row, "ChkGridCompra");
                chkVenda = (SinacorCheckBox)ControlHelper.FindChild(row, "ChkGridVenda");

                cmbAssessor.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
                cmbGrupoAfinidade.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
                cmbMercado.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
                cmbTipoCliente.UpdateTarget(SinacorComboBox.ItemsSourceProperty);

                //Tipo bloqueio
                if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.Assessor)
                    rdbAssessor.IsChecked = true;
                else if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.Papel)
                    rdbAtivo.IsChecked = true;
                else if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.Cliente)
                    rdbCliente.IsChecked = true;
                else if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.GrupoAfinidade)
                    rdbGrupoAfinidade.IsChecked = true;
                else if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.Mercado)
                    rdbMercado.IsChecked = true;
                else if (this.CurrentModel.Tipo == Model.Enum.TipoBloqueio.TipoCliente)
                    rdbTipoCliente.IsChecked = true;

                //Natureza Operacao
                if (this.CurrentModel.NaturezaOperacao == Model.Enum.NaturezaOperacao.CompraVenda)
                {
                    chkCompra.IsChecked = true;
                    chkVenda.IsChecked = true;
                }
                else if (this.CurrentModel.NaturezaOperacao == Model.Enum.NaturezaOperacao.Compra)
                    chkCompra.IsChecked = true;
                else if (this.CurrentModel.NaturezaOperacao == Model.Enum.NaturezaOperacao.Venda)
                    chkVenda.IsChecked = true;
                else
                {
                    chkCompra.IsChecked = false;
                    chkVenda.IsChecked = false;
                }
            }
        }

        #endregion

        #region Eventos

        private void DtgBloqueio_Deleting(object sender, CancelItemsEventArgs e)
        {
            this.ClearServiceErrors();

            if (!this.PresenterCadastroBloqueio.ExcluirBloqueio(this.CurrentModel))
            {
                e.Cancel = true;
            }
        }

        private void DtgBloqueio_EndingInsert(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ShowUserWaitingProcess();
                
                this.ClearServiceErrors();

                this.AtualizaCamposCurrentModel();

                if (!this.PresenterCadastroBloqueio.IncluirBloqueio(this.CurrentModel))
                {
                    e.Cancel = true;
                }

                this.HideUserWaitingProcess();
            }
        }

        private void DtgBloqueio_EndingUpdate(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ShowUserWaitingProcess();
                
                this.ClearServiceErrors();

                this.AtualizaCamposCurrentModel();

                if (!this.PresenterCadastroBloqueio.AlterarBloqueio(this.CurrentModel))
                {
                    e.Cancel = true;
                }

                this.HideUserWaitingProcess();
            }
        }

        private void DtgBloqueio_InsertBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();
                this.AtualizaControlesCurrentModel();
            }
        }

        private void DtgBloqueio_UpdateBegun(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();
                this.AtualizaControlesCurrentModel();
            }
        }

        private void DtgBloqueio_UpdateCanceled(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();
            }
        }

        private void DtgBloqueio_InsertCanceled(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();
            }
        }

        private void CadastroBloqueio_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.ShowUserWaitingProcess();
            
            this.PresenterCadastroBloqueio.Inicializar();

            this.HideUserWaitingProcess();
        }

        private void BtnPesquisarCliente_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.PesquisarCliente(Origem.Pesquisa);
        }

        private void BtnPesquisarAtivo_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.PesquisarAtivo(Origem.Pesquisa);
        }

        private void BtnNovaPesquisa_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.LimparCampos();
        }

        private void BtnPesquisar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ShowUserWaitingProcess();
            
            this.ConsultarBloqueios();

            this.HideUserWaitingProcess();
        }

        private void BtnGridSalvar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            if (DtgBloqueio.IsInserting)
                DtgBloqueio.EndInsert();
            else if(DtgBloqueio.IsUpdating)
                DtgBloqueio.EndUpdate();
        }

        private void BtnGridCancelar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            if (DtgBloqueio.IsInserting)
                DtgBloqueio.CancelInsert();
            else if (DtgBloqueio.IsUpdating)
                DtgBloqueio.CancelUpdate();
        }

        private void BtnGridPesquisarCliente_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.PesquisarCliente(Origem.Grid);
        }

        private void BtnGridPesquisarAtivo_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.PesquisarAtivo(Origem.Grid);
        }

        private void DtgBloqueio_Deleted(object sender, ItemsEventArgs e)
        {
            ConsultarBloqueios();
        }

        private void DtgBloqueio_InsertEnded(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ShowUserWaitingProcess();

                ConsultarBloqueios();

                this.HideUserWaitingProcess();
            }
        }

        private void DtgBloqueio_UpdateEnded(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ShowUserWaitingProcess();

                ConsultarBloqueios();

                this.HideUserWaitingProcess();
            }
        }

        private void RdbCliente_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.Cliente);
        }

        private void RdbAtivo_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.Papel);
        }

        private void RdbTipoCliente_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.TipoCliente);
        }

        private void RdbAssessor_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.Assessor);
        }

        private void RdbMercado_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.Mercado);
        }

        private void RdbGrupoAfinidade_Checked(object sender, RoutedEventArgs e)
        {
            this.PresenterCadastroBloqueio.AtualizarEstadoTipoBloqueio(Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Enum.TipoBloqueio.GrupoAfinidade);
        }

        private void TxtCliente_Validating(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = new ValidationResult(true, "");
            
            if (this.PresenterCadastroBloqueio.FiltroBloqueio != null &&
                this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente != null &&
                e.Value != null && !string.IsNullOrEmpty(e.Value.ToString()))
            {
                this.PresenterCadastroBloqueio.VerificarCliente(e.Value.ToString());

                if (this.PresenterCadastroBloqueio.ClienteAtual == null)
                {
                    this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente.Codigo = null;
                    e.Result = new ValidationResult(false, "Bovespa.ManutencaoOrdens.Message.ClienteNaoEncontrado");
                }
                else
                {
                    this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente.Codigo = this.PresenterCadastroBloqueio.ClienteAtual.Codigo;
                }
            }
            else
                this.PresenterCadastroBloqueio.FiltroBloqueio.Cliente.Codigo = null;
        }

        private void TxtGridCliente_Validating(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = new ValidationResult(true, "");
            
            if (this.CurrentModel != null &&
                this.CurrentModel.Cliente != null &&
                e.Value != null && !string.IsNullOrEmpty(e.Value.ToString()))
            {
                this.PresenterCadastroBloqueio.VerificarCliente(e.Value.ToString());

                if (this.PresenterCadastroBloqueio.ClienteAtual == null)
                {
                    this.CurrentModel.Cliente.Codigo = null;
                    e.Result = new ValidationResult(false, "Bovespa.ManutencaoOrdens.Message.ClienteNaoEncontrado");
                }
                else
                {
                    this.CurrentModel.Cliente.Codigo = this.PresenterCadastroBloqueio.ClienteAtual.Codigo;
                }
            }
            else
                this.CurrentModel.Cliente.Codigo = null;
        }

        #endregion

        #region ICadastroBloqueio Members

        public void AtualizarListaBloqueios()
        {
            DtgBloqueio.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void AtualizarListas()
        {
            CmbAssessor.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbGrupoAfinidade.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbMercado.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbTipoCliente.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
        }

        public void InformarClienteNaoEncontrado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.ManutencaoOrdens.Message.ClienteNaoEncontrado").ToString(), 
                                   SinacorMessageBoxButton.Ok, 
                                   SinacorMessageBoxImage.Exclamation);
        }

        public void InformarPesquisaSemResultado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.ManutencaoOrdens.Message.PesquisaSemRetorno").ToString(), 
                                   SinacorMessageBoxButton.Ok, 
                                   SinacorMessageBoxImage.Exclamation);
        }

        public void InformarSucessoOperacao()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.ManutencaoOrdens.Message.OperacaoSucesso").ToString(), 
                                   SinacorMessageBoxButton.Ok, 
                                   SinacorMessageBoxImage.Information);
        }

        public void InformarTituloNaoCadastrado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.ManutencaoOrdens.Message.TituloNaoCadastrado").ToString(), 
                                   SinacorMessageBoxButton.Ok, 
                                   SinacorMessageBoxImage.Exclamation);
        }

        public bool ConfimarExclusaoBloqueio()
        {
            SinacorMessageBoxResult resultado =
                SinacorMessageBox.Show(this.FindResource("Bovespa.ManutencaoOrdens.Message.ConfirmarExclusaoBloqueio").ToString(), 
                                       SinacorMessageBoxButton.YesNo, 
                                       SinacorMessageBoxImage.Question);

            return (resultado == SinacorMessageBoxResult.Yes);
        }

        public void AlterarEstadoBloqueioCliente(bool estado)
        {
            SinacorTextBox txtCliente = null;
            SinacorButton btnCliente = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                txtCliente = (SinacorTextBox)ControlHelper.FindChild(row, "TxtGridCliente");
                txtCliente.IsEnabled = estado;
                btnCliente = (SinacorButton)ControlHelper.FindChild(row, "BtnGridPesquisarCliente");
                btnCliente.IsEnabled = estado;
            }
        }

        public void AlterarEstadoBloqueioTipoCliente(bool estado)
        {
            SinacorComboBox cmbTipoCliente = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                cmbTipoCliente = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridTipoCliente");
                cmbTipoCliente.IsEnabled = estado;
            }
        }

        public void AlterarEstadoBloqueioAtivo(bool estado)
        {
            SinacorTextBox txtAtivo = null;
            SinacorButton btnAtivo = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                txtAtivo = (SinacorTextBox)ControlHelper.FindChild(row, "TxtGridAtivo");
                txtAtivo.IsEnabled = estado;
                btnAtivo = (SinacorButton)ControlHelper.FindChild(row, "BtnGridPesquisarAtivo");
                btnAtivo.IsEnabled = estado;
            }
        }

        public void AlterarEstadoBloqueioMercado(bool estado)
        {
            SinacorComboBox cmbMercado = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                cmbMercado = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridMercado");
                cmbMercado.IsEnabled = estado;
            }
        }

        public void AlterarEstadoBloqueioGrupoAfinidade(bool estado)
        {
            SinacorComboBox cmbGrupoAfinidade = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                cmbGrupoAfinidade = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridGrupoAfinidade");
                cmbGrupoAfinidade.IsEnabled = estado;
            }
        }

        public void AlterarEstadoBloqueioAssessor(bool estado)
        {
            SinacorComboBox cmbAssessor = null;
            BaseRow row = null;

            if (DtgBloqueio.IsInserting)
            {
                row = DtgBloqueio.GetInsertionRow();
            }
            else if (DtgBloqueio.IsUpdating)
            {
                row = DtgBloqueio.GetEditRow();
            }

            if (row != null)
            {
                cmbAssessor = (SinacorComboBox)ControlHelper.FindChild(row, "CmbGridAssessor");
                cmbAssessor.IsEnabled = estado;
            }
        }
        #endregion
    }
}
